#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "io.h"
#include "main.h"
#include "point.h"

void loadFirstLine(FILE *input);
void loadSecondLine(FILE *input);

/*
 * Načte vstupní data programu ze souboru.
 */
void loadInput(FILE *input){
	loadFirstLine(input);
	loadSecondLine(input);
}

/*
 * Načte hodnoty vstupních parametrů z prvního řádku (obsahuje hodnoty
 * m, k, f a b).
 */
void loadFirstLine(FILE *input){
	/*
	 * Maximální hodnota unsigned short = 65 535, tj pět znaků (bez oddělovače
	 * tisíců). Máme tam 4 čísla: m, k, f a b = 20 znaků. Doplníme oddělovací
	 * bílé znaky (3), line separator na konci (2, CRLF) a 0 pro konec řetězce.
	 * = 26 maximální délka prvního řádku.
	 */
	char buffer[26];

	/* načteme první řádek */
    fgets(buffer, sizeof(buffer), input);

    /* zde musíme rozdělit první řádek podle mezer, abychom se dostali ke
    vstupním datům */
    char *split[4];
    split[0] = (char *)strtok(buffer, " ");
    int i;
    for(i = 1; i < 4; i++){
    	split[i] = (char *)strtok(NULL, " ");
    }

    m = atoi(split[0]);
    k = atoi(split[1]);
    f = atoi(split[2]);
    b = atoi(split[3]);
}

/**
 * Načte hodnoty vstupních parametrů z druhého a dalších řádků (obsahují hodnoty
 * souřadnic pro pevně určené body, každá souřadnice na novém řádku).
 */
void loadSecondLine(FILE *input){
	fixedPoints = (Point *)malloc(f * sizeof(Point));
	/*
	 * Maximální hodnota unsigned short = 65 535, tj pět znaků (bez oddělovače
	 * tisíců). Máme dvě souřadnice (2 * 5 = 10) + závorky (2) + čárka a mezera
	 * (2) + line separator (2, CRLF) + 0 pro konec řetězce (1) = 17.
	 */
	char buffer[17];

	int i;
	for(i = 0; i < f; i++){
		/* přečteme řádek */
	    fgets(buffer, sizeof(buffer), input);

	    /* očištění od závorek */
	    char clean[strlen(buffer) - 1];
	    strncpy(clean, buffer+1, strlen(buffer)-1);

	    /* rozdělení na x a y */
	    char *posX = (char *)strtok(clean, ",");
	    char *posY = (char *)strtok(NULL, ",");

	    /* uložení hodnot */
	    fixedPoints[i].x = atoi(posX);
	    fixedPoints[i].y = atoi(posY);
	}
}
